
/*
 * Desenvolvimento para WEB
 * 
 * NOME: Vitor Augusto Graciani           RA: 345270
 * NOME: Felipe Petruz Brina              RA: 345083
 * NOME: Diego Zamboni Latance            RA: 344990
 * NOME: Rafael Claudio Domene            RA: 345040
 * NOME: Vinicius Rodrigues de Campos     RA: 345350
 * 
 */
package controle;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Transport;
import javax.mail.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.*;

public class RecebeDadosCadastro extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String tipoCadastro = request.getParameter("acao");

        if (tipoCadastro.compareTo("cadastroColaborador") == 0) {
            String nomeColaborador = request.getParameter("nomeColaborador");
            String emailColaborador = request.getParameter("emailColaborador");
            String senhaColaborador = request.getParameter("senhaColaborador");
            String sobrenomeColaborador = request.getParameter("sobrenomeColaborador");
            try {
                cadastrarColaborador(request, response, nomeColaborador, emailColaborador, senhaColaborador, sobrenomeColaborador);
            } catch (MessagingException ex) {
                Logger.getLogger(RecebeDadosCadastro.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        if (tipoCadastro.compareTo("cadastroTipo") == 0) {
            String cadastroTipo = request.getParameter("cadastroTipo");
            String cadastroTipoCategoria = request.getParameter("cadastroTipoCategoria");
            cadastrarTipo(request, response, cadastroTipo, cadastroTipoCategoria);
        }


        if (tipoCadastro.compareTo("cadastroEntidade") == 0) {
            String displayName = request.getParameter("dpname");
            String wikikeys = request.getParameter("wikikeys");
            String categorias = request.getParameter("nomeDominio");
            String tipos = request.getParameter("tipo");
            String descricao = request.getParameter("descricao");
            cadastrarEntidade(request, response, displayName, wikikeys, categorias, tipos, descricao);
        }

        if (tipoCadastro.compareTo("cadastroCategoria") == 0) {
            String nomeCategoria = request.getParameter("categoria");
            cadastrarCategoria(request, response, nomeCategoria);
        }
    }

    //Cadastro colaborador
    private void cadastrarColaborador(HttpServletRequest request, HttpServletResponse response,
            String nome, String email, String senha, String sobrenome)
            throws ServletException, IOException, MessagingException {
        ColaboradorBEAN colaborador = new ColaboradorBEAN();

        colaborador.setSenha(senha);
        colaborador.setNome(nome);
        colaborador.setEmail(email);
        colaborador.setSobrenome(sobrenome);
        try {

            ColaboradorDAO cadColaborador = new ColaboradorDAO();

            if (cadColaborador.emailValido(email)) {

                cadColaborador.cadastroColaborador(colaborador);
                enviarEmail(nome, email, senha);
                response.sendRedirect("cadastroSucesso.jsp");

            } else {

                response.sendRedirect("erroEmail.jsp");
            }

        } catch (DAOException e) {
            //Rever seus conceitos aqui ****************************************************************************************************88
            e.printStackTrace();
        }
    }

    //Cadastro de categoria no BD
    private void cadastrarCategoria(HttpServletRequest request, HttpServletResponse response,
            String nomeCategoria)
            throws ServletException, IOException {
        ConsultaCategoriaBEAN categoria = new ConsultaCategoriaBEAN();
        categoria.setCategoria(nomeCategoria);
        try {
            ConsultaCategoriaDAO cadCategoria = new ConsultaCategoriaDAO();
            cadCategoria.cadastroCategoria(categoria);
            response.sendRedirect("index.jsp");
        } catch (DAOException e) {
            e.printStackTrace();//o que por nesse catch!! ****************************************************************************************************
        }
    }

    //Cadastro de Entidade
    private void cadastrarEntidade(HttpServletRequest request, HttpServletResponse response,
            String displayName, String wikikeys, String categorias, String tipos, String descricao)
            throws ServletException, IOException {

        EntidadeBEAN entidade = new EntidadeBEAN();

        entidade.setDescricao(descricao);
        entidade.setDisplayName(displayName);

        entidade.setWikikeys(wikikeys);

        try {
            ConsultaEntidadeAbsolutaDAO cadEntidade = new ConsultaEntidadeAbsolutaDAO();
            cadEntidade.cadastroEntidade(entidade);
            response.sendRedirect("index.jsp");
        } catch (DAOException e) {
            e.printStackTrace();//****************************************************************************************************
        }
    }

    //Cadastrar tipo no BD
    private void cadastrarTipo(HttpServletRequest request, HttpServletResponse response, String tipo, String cadastroTipoCategoria) throws ServletException, IOException {

        ConsultaTipoBEAN cadTipo = new ConsultaTipoBEAN();
        cadTipo.setTipo(tipo);
        cadTipo.setCategoria(cadastroTipoCategoria);

        try {
            ConsultaTipoDAO cadastroTipo = new ConsultaTipoDAO();
            cadastroTipo.cadastroTipo(cadTipo);
            response.sendRedirect("index.jsp");
        } catch (DAOException e) {
            e.printStackTrace();//implementar o catch****************************************************************************************************
        }
    }

    public void enviarEmail(String nome, String email, String senha) throws MessagingException {

        String mailSMTPServer = "smtp.gmail.com";
        String mailSMTPServerPort = "465";

        Properties p = new Properties();

        p.put("mail.transport.protocol", "smtp");
        p.put("mail.smtp.starttls.enable", "true");
        p.put("mail.smtp.host", mailSMTPServer);
        p.put("mail.smtp.auth", "true");
        p.put("mail.smtp.user", "TechBase");
        p.put("mail.debug", "true");
        p.put("mail.smtp.port", mailSMTPServerPort);
        p.put("mail.smtp.socketFactory.port", mailSMTPServerPort);
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        p.put("mail.smtp.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(p);
        session.setDebug(true);

        Message msg = (Message) new MimeMessage(session);
        try {
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
            msg.setFrom(new InternetAddress("dontreply.techbase@gmail.com"));
            msg.setHeader(email, "TechBase");
            msg.setSubject("Bem Vindo ao TechBase");
            msg.setContent("Bem Vindo " + nome + ". Voce agora é um colaborador da TechBase.\n"
                    + "Seu Login é: " + email + ".\n"
                    + "Sua Senha é: " + senha + ".\n"
                    + "Agora você pode cadastrar e alterar dados do nosso site.", "text/plain");

        } catch (Exception e) {
            System.out.println(">> Erro: Completar Mensagem");
            e.printStackTrace();

        }

        Transport tr;
        try {
            tr = session.getTransport("smtp");
            tr.connect(mailSMTPServer, "dontreply.techbase@gmail.com", "tech123base");
            msg.saveChanges();
            tr.sendMessage(msg, msg.getAllRecipients());
            tr.close();

        } catch (Exception e) {
            System.out.println(">> Erro: Envio Mensagem");
            e.printStackTrace();
        }


    }
}
